/**
  * @page	docs	Documenting the code
  * @ingroup guidedev
  * @author	Michael Baar

<p>Code developed for the ScatterWeb system shall be documented using <a href="http://www.stack.nl/~dimitri/doxygen/index.html">Doxygen</a>.
To keep it consistent the same style of Doxygen tags shall be used throughout the whole code.</p>

<p>Some general rules:</p>
<ul>
	<li>Each file has have a header.</li>
	<li>All members placed in headerfiles must have documentation.</li>
	<li>While reading this, open the existing documentation for examples!</li>
	<li>After documenting run Doxygen, fix all errors and test the documentation!</li>
</ul>

<p>Formatting rules:</p>
<ul>
	<li>Use the Doxygen JavaDoc style notation:
	@verbatim
  /**
   * @tagname		value
   *
   */
	@endverbatim</li>
	<li>Use the at-character for Doxygen tags in all code files.</li>
	<li>Use tabs to separate tags and their values to align the nicely. Make 
	sure you editor does not replace tabs by spaces.</li>
</ul>

<p>If you're using Eclipse as your editor, it will gladly support you by 
creating the stars at the beginning of the lines.</p>

<ul>
<li>\ref docs_module</li>
<li>\ref docs_file</li>
<li>\ref docs_fn</li>
<li>\ref docs_commands</li>
</ul>

@section	docs_module	Module Documentation

<p>Modules are documented as separate pieces of documentation. Place one or more files with module documentation into a "docs"
subdirectory of the library. Make sure the file names match the code file names (e.g. ScatterWeb.Configuration). Documentation
files shall use the extension "doc.html".</p>

<p>To create a module section in the documentation you have to create a group 
using <a href="http://www.stack.nl/~dimitri/doxygen/commands.html#cmddefgroup">
defgroup</a>. Files and other documentation blocks can then
be added to this group. See 
<a href="http://www.stack.nl/~dimitri/doxygen/grouping.html">grouping</a>.</p>
<p>Example:</p>

<pre>@verbatim
/**
 * @defgroup config Node Configuration
   
Documentation using doxygen plus simple html tags (paragraphs, tables, bold) goes here.

 @section	config_s1	Section 1

Text...
 
 @section	config_s2	Section 2

Text ...*/ @endverbatim</pre>

@section	docs_file	File Documentation



<pre>@verbatim
/**
 * @file        ScatterWeb.Configuration.c
 * @ingroup     config						
 * @brief       Configuration public interface
 * @version     $Revision$					
 * @since       1.0
 * @author      Michael Baar
 *
 * Long description of file. If module description is available, a link to this.
 *
 * $Id$
 */
/**
  * @ingroup config
  * @{

File Contents...

/** @} */
 @endverbatim</pre>

<p>The first documentation block describes the file contents. The second block, 
that spans over the whole files says that all documentation inside it belongs to 
the module &quot;config&quot;. This way you don't have to add the \@ingroup tag to 
every member.</p>

<table class="doc">
	<tr>
		<th>Tag</th>
		<th>Description</th>
	</tr>
	<tr>
		<td>\@file</td>
		<td>file name without path</td>
	</tr>
	<tr>
		<td>\@ingroup</td>
		<td>module (see \ref docs_module)</td>
	</tr>
	<tr>
		<td>\@brief</td>
		<td>Short description of what this file contains.</td>
	</tr>
	<tr>
		<td>\@version</td>
		<td>always $Rev$ (which gets replaced by the SVN revision)</td>
	</tr>
	<tr>
		<td>\@since</td>
		<td>First ScatterWeb version this file was introduced.</td>
	</tr>
	<tr>
		<td>\@author</td>
		<td>One or more authors separated by comma (if applicable).</td>
	</tr>
	<tr>
		<td>(description)</td>
		<td>More detailed documentation on this file. If there is module 
		documentation, provide a link and make this short. Again, always put &quot;$Id$&quot; 
		at the end. It is replaced by subversion.<p>Note: Make sure, that 
		there's a blank line above</td>
	</tr>
</table>

@section	docs_fn	Function Declarations

<pre>@verbatim
/**
 * @brief         Get a string from a stringtable
 * 
 * @param[in]     table    Stringtable
 * @param[in]     index    String to get from table
 * @return                 Pointer to start of string index from table. If the end of the table is reached, returns pointer to '\0';
 * 
 * @since         1.1
 * 
 * A stringtable shall be a character array with one or more strings, with each string
 * ending with a null-character. The table is to be terminated by an end-of-text character.
 * The first string shall have the index 0.
 *
 * Example: <code>const char stringtable[] = "string1\0string2\0\3"</code>
 */
const char* String_stringtableGet(const char* table, register const UINT16 index);
@endverbatim</pre>


<table class="doc">
	<tr>
		<th>Tag</th>
		<th>Description</th>
	</tr>
	<tr>
		<td>\@brief</td>
		<td>Short description of what this functions does</td>
	</tr>
	<tr>
		<td>
		<a href="http://www.stack.nl/~dimitri/doxygen/commands.html#cmdparam">\@param</a></td>
		<td>Direction, Name of parameter (must match that in declaration) and 
		short description.</td>
	</tr>
	<tr>
		<td>\@return</td>
		<td>Short description of return value (if any).</td>
	</tr>
	<tr>
		<td>\@since</td>
		<td>First ScatterWeb version this function was introduced.</td>
	</tr>
	<tr>
		<td>&nbsp;</td>
		<td>Documentation of function using possibly (may use few, simple html 
		tags)</td>
	</tr>
</table>

<p>Private functions (those which are not declared in header files) shall be documented by at least 
a brief documentation inside the c-file.</p>

@section	docs_commands	Commands

<p>Commands are essentially functions, but defined by macros and with parameters 
that are not defined in code. They will be shown in the documentation as 
ASCII_COMMAND(name). They are to be documented like any other function, but 
Doxygen will display warning about parameters, which are not found in the code.</p>
<p>Document the command line within the brief tag, as seen below. Mandatory parameter 
names shall be noted without brackets, optional parameters with square brackets. All command shall be added 
to the &quot;commands&quot; group.</p>
<p>Example:</p>

<pre>@verbatim
/**
 * @brief	       Node id property \\n <code>id [newid]
 * @ingroup      commands</code>
 * @param	       newid    New node id (optional)
 * @return               Current id
 */
COMMAND(id, 0, args, replyBuffer) {
...
}
@endverbatim</pre>



*/